home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK2.toast / Development Kits (Disc 2) / TEC 1.3.1 / Headers & Libs / Interfaces / UnicodeConverter.h < prev   
Encoding:
C/C++ Source or Header  |  1998-01-12  |  12.9 KB  |  300 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        UnicodeConverter.h
  3.  
  4.      Contains:    Types, constants, and prototypes for Unicode Converter
  5.  
  6.      Version:    Mac OS 8 (Tempo)
  7.  
  8.      DRI:        Julio Gonzalez
  9.  
  10.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            BuildGod
  17.                  With Interfacer:    2.0d13   (PowerPC native)
  18.                  From:                UnicodeConverter.i
  19.                      Revision:        5
  20.                      Dated:            11/18/97
  21.                      Last change by:    PKE
  22.                      Last comment:    Now move InitializeUnicode and TerminateUnicode (the old names)
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28. #ifndef __UNICODECONVERTER__
  29. #define __UNICODECONVERTER__
  30.  
  31. #ifndef __TYPES__
  32. #include <Types.h>
  33. #endif
  34. #ifndef __TEXTCOMMON__
  35. #include <TextCommon.h>
  36. #endif
  37. #ifndef __MIXEDMODE__
  38. #include <MixedMode.h>
  39. #endif
  40.  
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44.  
  45. #if PRAGMA_IMPORT_SUPPORTED
  46. #pragma import on
  47. #endif
  48.  
  49. #if PRAGMA_ALIGN_SUPPORTED
  50. #pragma options align=mac68k
  51. #endif
  52.  
  53. /* Unicode conversion contexts: */
  54. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  55. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  56. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  57. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  58. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  59. /* UnicodeMapVersion type & values */
  60. typedef SInt32 UnicodeMapVersion;
  61.  
  62. enum {
  63.     kUnicodeUseLatestMapping    = -1,
  64.     kUnicodeUseHFSPlusMapping    = 4
  65. };
  66.  
  67. /* Types used in conversion */
  68. struct UnicodeMapping {
  69.     TextEncoding                     unicodeEncoding;
  70.     TextEncoding                     otherEncoding;
  71.     UnicodeMapVersion                 mappingVersion;
  72. };
  73. typedef struct UnicodeMapping UnicodeMapping;
  74.  
  75. typedef UnicodeMapping *UnicodeMappingPtr;
  76. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  77. /* Control flags for ConvertFromUnicodeToText and ConvertFromTextToUnicode */
  78.  
  79. enum {
  80.     kUnicodeUseFallbacksBit        = 0,
  81.     kUnicodeKeepInfoBit            = 1,
  82.     kUnicodeDirectionalityBits    = 2,
  83.     kUnicodeVerticalFormBit        = 4,
  84.     kUnicodeLooseMappingsBit    = 5,
  85.     kUnicodeStringUnterminatedBit = 6,
  86.     kUnicodeTextRunBit            = 7,
  87.     kUnicodeKeepSameEncodingBit    = 8
  88. };
  89.  
  90.  
  91. enum {
  92.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  93.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  94.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  95.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  96.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  97.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  98.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  99.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  100. };
  101.  
  102. /* Values for kUnicodeDirectionality field */
  103.  
  104. enum {
  105.     kUnicodeDefaultDirection    = 0,
  106.     kUnicodeLeftToRight            = 1,
  107.     kUnicodeRightToLeft            = 2
  108. };
  109.  
  110. /* Directionality masks for control flags */
  111.  
  112. enum {
  113.     kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
  114.     kUnicodeLeftToRightMask        = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
  115.     kUnicodeRightToLeftMask        = kUnicodeRightToLeft << kUnicodeDirectionalityBits
  116. };
  117.  
  118. /* Control flags for TruncateForUnicodeToText: */
  119. /*
  120.  Now TruncateForUnicodeToText uses control flags from the same set as used by
  121.  ConvertFromTextToUnicode, ConvertFromUnicodeToText, etc., but only
  122.  kUnicodeStringUnterminatedMask is meaningful for TruncateForUnicodeToText.
  123.  
  124.  Previously two special control flags were defined for TruncateForUnicodeToText:
  125.         kUnicodeTextElementSafeBit = 0
  126.         kUnicodeRestartSafeBit = 1
  127.  However, neither of these was implemented.
  128.  Instead of implementing kUnicodeTextElementSafeBit, we now use
  129.  kUnicodeStringUnterminatedMask since it accomplishes the same thing and avoids
  130.  having special flags just for TruncateForUnicodeToText
  131.  Also, kUnicodeRestartSafeBit is unnecessary, since restart-safeness is handled by
  132.  setting kUnicodeKeepInfoBit with ConvertFromUnicodeToText.
  133.  If TruncateForUnicodeToText is called with one or both of the old special control
  134.  flags set (bits 0 or 1), it will not generate a paramErr, but the old bits have no
  135.  effect on its operation.
  136. */
  137. /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
  138.  
  139. enum {
  140.     kUnicodeMatchUnicodeBaseBit    = 0,
  141.     kUnicodeMatchUnicodeVariantBit = 1,
  142.     kUnicodeMatchUnicodeFormatBit = 2,
  143.     kUnicodeMatchOtherBaseBit    = 3,
  144.     kUnicodeMatchOtherVariantBit = 4,
  145.     kUnicodeMatchOtherFormatBit    = 5
  146. };
  147.  
  148.  
  149. enum {
  150.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  151.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  152.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  153.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  154.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  155.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  156. };
  157.  
  158. /* Control flags for SetFallbackUnicodeToText */
  159.  
  160. enum {
  161.     kUnicodeFallbackSequencingBits = 0
  162. };
  163.  
  164.  
  165. enum {
  166.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  167. };
  168.  
  169. /* values for kUnicodeFallbackSequencing field */
  170.  
  171. enum {
  172.     kUnicodeFallbackDefaultOnly    = 0L,
  173.     kUnicodeFallbackCustomOnly    = 1L,
  174.     kUnicodeFallbackDefaultFirst = 2L,
  175.     kUnicodeFallbackCustomFirst    = 3L
  176. };
  177.  
  178. /* Caller-supplied entry point to a fallback handler */
  179. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount *oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount *oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr);
  180.  
  181. #if GENERATINGCFM
  182. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  183. #else
  184. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  185. #endif
  186.  
  187. enum {
  188.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  189.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  190.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  191.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  192.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  193.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
  194.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  195.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  196.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  197.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  198. };
  199.  
  200. #if GENERATINGCFM
  201. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  202.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  203. #else
  204. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  205.         ((UnicodeToTextFallbackUPP) (userRoutine))
  206. #endif
  207.  
  208. #if GENERATINGCFM
  209. #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr)        \
  210.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
  211. #else
  212. #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr)        \
  213.         (*(userRoutine))((iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
  214. #endif
  215. /* Function prototypes */
  216. #if GENERATING68K && !GENERATINGCFM
  217. /*
  218.     Routine to Initialize the Unicode Converter and cleanup once done with it. 
  219.     These routines must be called from Static Library clients.
  220. */
  221. extern pascal OSStatus InitializeUnicodeConverter(StringPtr TECFileName);
  222.  
  223. extern pascal void TerminateUnicodeConverter(void );
  224.  
  225. /* Note: the old names (InitializeUnicode, TerminateUnicode) for the above are still exported.*/
  226. #endif
  227. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
  228.  
  229. extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
  230.  
  231. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
  232.  
  233. extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
  234.  
  235. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  236.  
  237. extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  238.  
  239. extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  240.  
  241. /* Change the TextToUnicodeInfo to another mapping. */
  242. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  243.  
  244. /* Change the UnicodeToTextInfo to another mapping. */
  245. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  246.  
  247. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
  248.  
  249. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
  250.  
  251. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextRunInfo);
  252.  
  253. extern pascal OSStatus ConvertFromTextToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oSourceRead, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  254.  
  255. extern pascal OSStatus ConvertFromUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr);
  256.  
  257. extern pascal OSStatus ConvertFromUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iEncodingRunBufLen, ItemCount *oEncodingRunOutLen, TextEncodingRun oEncodingRuns[]);
  258.  
  259. extern pascal OSStatus ConvertFromUnicodeToScriptCodeRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iScriptRunBufLen, ItemCount *oScriptRunOutLen, ScriptCodeRun oScriptCodeRuns[]);
  260.  
  261. /* Truncate a multibyte string at a safe place. */
  262. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  263.  
  264. /* Truncate a Unicode string at a safe place. */
  265. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  266.  
  267. /* Convert a Pascal string to Unicode string. */
  268. extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iOutputBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  269.  
  270. /* Convert a Unicode string to Pascal string. */
  271. extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
  272.  
  273. /* Count the available conversion mappings. */
  274. extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
  275.  
  276. /* Get a list of the available conversion mappings. */
  277. extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
  278.  
  279. /* Setup the fallback handler for converting Unicode To Text. */
  280. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  281.  
  282. /* Setup the fallback handler for converting Unicode To TextRuns. */
  283. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  284.  
  285.  
  286. #if PRAGMA_ALIGN_SUPPORTED
  287. #pragma options align=reset
  288. #endif
  289.  
  290. #if PRAGMA_IMPORT_SUPPORTED
  291. #pragma import off
  292. #endif
  293.  
  294. #ifdef __cplusplus
  295. }
  296. #endif
  297.  
  298. #endif /* __UNICODECONVERTER__ */
  299.  
  300.